"""
安全框架使用示例
展示如何在现有路由中集成安全功能
"""

# ========== 示例1: 添加认证要求 ==========
from src.utils.jwt_utils import require_auth

@course_bp.route('/my-courses', methods=['GET'])
@require_auth
def get_my_courses():
    """获取当前用户的课程（需要登录）"""
    user = g.current_user  # 获取当前用户信息
    # 使用 user['user_id'] 查询该用户的课程
    return jsonify({
        'status': 'success',
        'data': []
    })


# ========== 示例2: 添加角色权限要求 ==========
from src.utils.jwt_utils import require_role

@course_bp.route('/admin/courses', methods=['GET'])
@require_role('admin', 'super_admin')
def admin_get_courses():
    """管理员获取所有课程"""
    # 只有admin或super_admin可以访问
    return jsonify({
        'status': 'success',
        'data': []
    })


# ========== 示例3: 添加API限流 ==========
from src.utils.rate_limit import rate_limit

@course_bp.route('/popular', methods=['GET'])
@rate_limit(limit=30, window=60, per='ip')  # 每个IP每分钟最多30次
def get_popular_courses():
    """获取热门课程"""
    return jsonify({
        'status': 'success',
        'data': []
    })


# ========== 示例4: 添加输入验证 ==========
from src.utils.security import validate_json_input

@course_bp.route('/create', methods=['POST'])
@require_auth  # 需要登录
@require_role('teacher', 'admin')  # 需要教师或管理员角色
@rate_limit(limit=10, window=3600, per='user')  # 每小时最多10次
@validate_json_input({
    'name': {'required': True, 'type': str, 'min_length': 3, 'max_length': 100},
    'credits': {'required': True, 'type': (int, float), 'pattern': r'^\d+(\.\d+)?$'}
})
def create_course():
    """创建课程（需要教师或管理员权限）"""
    data = request.validated_data  # 已经验证和清理的数据
    user = g.current_user
    
    # 创建课程逻辑
    return jsonify({
        'status': 'success',
        'message': '课程创建成功'
    })


# ========== 示例5: 组合使用多个安全功能 ==========
@course_bp.route('/rate', methods=['POST'])
@require_auth  # 需要登录
@rate_limit(limit=20, window=3600, per='user')  # 每小时最多20次评价
@validate_json_input({
    'course_id': {'required': True, 'type': int},
    'rating': {'required': True, 'type': (int, float), 'pattern': r'^[1-5]$'},
    'comment': {'required': False, 'type': str, 'max_length': 1000}
})
def rate_course():
    """评价课程"""
    data = request.validated_data
    user = g.current_user
    
    # 评价逻辑
    return jsonify({
        'status': 'success',
        'message': '评价提交成功'
    })


# ========== 示例6: 在现有路由中添加安全功能 ==========
# 假设这是现有的路由
@course_bp.route('/<int:course_id>', methods=['GET'])
# 添加认证（可选，如果需要）
# @require_auth
# 添加限流（推荐）
@rate_limit(limit=100, window=60, per='ip')
def get_course(course_id):
    """获取课程详情"""
    # 原有逻辑保持不变
    # 如果需要，可以通过 g.current_user 获取当前用户
    user = getattr(g, 'current_user', None)
    
    return jsonify({
        'status': 'success',
        'data': {}
    })

